Menu Docs
Página inicial do Docs

Otimizar consultas usando índices

Nesta página, você pode ver exemplos de código copiáveis que mostram como gerenciar diferentes tipos de índices usando o driver C.

Dica

Para saber mais sobre como trabalhar com índices, consulte o Índices guia. Para saber mais sobre qualquer um dos índices mostrados nesta página, consulte o link fornecido em cada seção.

Para usar um exemplo desta página, copie o exemplo de código para oaplicativo de amostra ou para seu próprio aplicativo. Certifique-se de substituir todos os espaços reservados nos exemplos de código, como <connection string URI>, pelos valores relevantes para sua implantação do MongoDB.

Você pode usar o seguinte aplicativo de exemplo para testar os exemplos de código nesta página. Para usar o aplicativo de amostra, execute as seguintes etapas:

  1. Verifique se o driver C está instalado.

  2. Copie o seguinte código e cole-o em um novo arquivo .c .

  3. Copie um exemplo de código desta página e cole-o nas linhas especificadas no arquivo.

1#include <bson/bson.h>
2#include <mongoc/mongoc.h>
3#include <stdio.h>
4
5int
6main(void)
7{
8 bson_error_t error;
9
10 mongoc_init();
11
12 mongoc_client_t *client = mongoc_client_new("<connection string URI>");
13 mongoc_collection_t *collection = mongoc_client_get_collection(client, "<database name>", "collection name");
14
15 // Start example code here
16
17 // End example code here
18
19 mongoc_collection_destroy(collection);
20 mongoc_client_destroy(client);
21 mongoc_cleanup();
22
23 return EXIT_SUCCESS;
24}

O exemplo seguinte cria um índice ascendente no campo especificado:

bson_t *keys = BCON_NEW("<field name>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para saber mais sobre índices de campo único, consulte o guia Índices de campo único .

O exemplo seguinte cria um índice composto de dois índices ascendentes nos campos especificados:

bson_t *keys = BCON_NEW("<field name 1>", BCON_INT32(1), "<field name 2>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para saber mais sobre índices compostos, consulte o guia Índices compostos .

O exemplo a seguir cria um índice de múltiplas chaves ascendente no campo com valor de array especificado:

bson_t *keys = BCON_NEW("<array field name>", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para saber mais sobre índices de várias chaves, consulte o guia Índices de várias chaves.

O exemplo seguinte cria um índice dsphere do 2no campo especificado que contém objetos GeoJSON:

bson_t *keys = BCON_NEW("<GeoJSON object field name>", BCON_UTF8("2dsphere"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

Para saber mais sobre o tipo de dados GeoJSON, consulte Objetos GeoJSON no manual do MongoDB Server .

O exemplo seguinte cria um índice único ascendente no campo especificado:

bson_t *keys = BCON_NEW("title", BCON_INT32(1));
bson_t *opts = BCON_NEW("unique", BCON_BOOL(true));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, opts);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
bson_destroy(opts);
mongoc_index_model_destroy(index_model);

O exemplo seguinte cria um índice curinga ascendente na coleção especificada:

bson_t *keys = BCON_NEW("$**", BCON_INT32(1));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

O exemplo seguinte cria uma nova coleção com um índice agrupado ascendente no campo _id :

bson_t *opts = BCON_NEW("clusteredIndex", "{",
"key", "{",
"_id", BCON_INT32(1),
"}",
"unique", BCON_BOOL(true),
"}");
mongoc_database_t *database = mongoc_client_get_database(client, "<database name>");
if (mongoc_database_create_collection(database, "<collection name>", opts, &error)) {
printf("Successfully created collection\n");
} else {
fprintf(stderr, "Failed to create collection: %s", error.message);
}
mongoc_database_destroy(database);
bson_destroy(opts);

O exemplo seguinte cria um índice de texto no campo de string especificado:

bson_t *keys = BCON_NEW("<field name>", BCON_UTF8("text"));
mongoc_index_model_t *index_model = mongoc_index_model_new(keys, NULL);
if (mongoc_collection_create_indexes_with_opts(collection, &index_model, 1, NULL, NULL, &error)) {
printf("Successfully created index\n");
} else {
fprintf(stderr, "Failed to create index: %s", error.message);
}
bson_destroy(keys);
mongoc_index_model_destroy(index_model);

O exemplo a seguir exclui um índice com o nome especificado:

if (mongoc_collection_drop_index(collection, "<index name>", &error)) {
printf("Successfully dropped index\n");
} else {
fprintf(stderr, "Failed to drop index: %s", error.message);
}

Para saber mais sobre como remover índices, consulte Remover um índice no guia Trabalhar com índices.

As seções a seguir contêm exemplos de código que descrevem como gerenciar índices de pesquisa MongoDB .

Para saber mais sobre os índices de pesquisa do MongoDB, consulte o guia Índices de pesquisa do MongoDB.

O exemplo a seguir cria um índice de pesquisa do MongoDB no campo especificado:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"createSearchIndexes" : "%s",
"indexes" : [ {"definition" : {"mappings" : {"dynamic" : false}}, "name" : "<index name>"} ]
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully created search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

Para saber mais sobre como criar índices de pesquisa, consulte o guia Criar um índice de pesquisa.

O exemplo a seguir imprime uma lista de índices de pesquisa do MongoDB na coleção especificada:

bson_t pipeline;
const bson_t *doc;
const char *pipeline_str = BSON_STR({"pipeline" : [ {"$listSearchIndexes" : {}} ]});
bson_init_from_json(&pipeline, pipeline_str, -1, &error);
mongoc_cursor_t *cursor =
mongoc_collection_aggregate(collection, MONGOC_QUERY_NONE, &pipeline, NULL, NULL);
while (mongoc_cursor_next(cursor, &doc)) {
char *str = bson_as_canonical_extended_json(doc, NULL);
printf("%s\n", str);
bson_free(str);
}
bson_destroy(&pipeline);
mongoc_cursor_destroy(cursor);

Para saber mais sobre como listar índices do Atlas Search , consulte o guia Listar índices do Atlas Search .

O exemplo a seguir atualiza um índice de pesquisa do MongoDB existente com a nova definição de índice especificada:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"updateSearchIndex" : "%s",
"definition" : {"mappings" : {"dynamic" : true}}, "name" : "<index name>"}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
bson_free(cmd_str);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully updated search index\n");
} else {
fprintf(stderr, "Failed to create search index: %s", error.message);
}
bson_destroy(&cmd);

Para saber mais sobre como atualizar índices do Atlas Search , consulte o guia Atualizar um índice do Atlas Search .

O exemplo a seguir excluir um índice de pesquisa do MongoDB com o nome especificado:

bson_t cmd;
char *cmd_str = bson_strdup_printf(
BSON_STR({
"dropSearchIndexes" : "%s",
"index" : "<index name>"
}),
"<collection name>");
bson_init_from_json(&cmd, cmd_str, -1, &error);
if (mongoc_collection_command_simple(collection, &cmd, NULL, NULL, &error)) {
printf("Successfully deleted search index\n");
} else {
fprintf(stderr, "Failed to delete search index: %s", error.message);
}
bson_destroy(&cmd);

Para saber mais sobre como excluir índices do Atlas Search , consulte o guia Excluir um índice do Atlas Search .

Nesta página